﻿using System;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Web.Security;
using System.Web.UI;
using ShoppingCart.Business.Logic;
using ShoppingCart.WebSite.Code;
using SC = ShoppingCart.Business.Entity;

namespace ShoppingCart.WebSite.Cliente
{
    public partial class Default : BasePage
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Page.IsPostBack) return;
            LoadDepartamentos();
            LoadCliente();
        }
        
        protected void DdlDepartamentoSelectedIndexChanged(object sender, EventArgs e)
        {
            LoadProvincias(Convert.ToInt32(ddlDepartamento.SelectedValue));
        }

        protected void DdlProvinciaSelectedIndexChanged(object sender, EventArgs e)
        {
            LoadDistritos(Convert.ToInt32(ddlProvincia.SelectedValue));
        }

        protected void BtnGuardarClick(object sender, EventArgs e)
        {
            try
            {
                var user = Membership.GetUser();
                var cliente = ClienteManager.Instancia.ObtenerPorGuid((Guid)user.ProviderUserKey);
                cliente.Apellidos = txtApellidos.Text.Trim();
                cliente.Celular = txtCelular.Text.Trim();
                cliente.Direccion = txtDireccion.Text.Trim();
                cliente.Dni = txtNumeroDocumento.Text.Trim();
                cliente.Email = txtEmail.Text.Trim();
                if (user.Email != cliente.Email) user.Email = cliente.Email;
                cliente.FechaNacimiento = GetCurrentDatetime(txtFechaNacimiento.Text.Trim());
                if (fuFoto.HasFile)
                {
                    var filename = Server.MapPath(ConfigurationManager.AppSettings["Foto"]) + user.UserName + Path.GetExtension(fuFoto.FileName);
                    fuFoto.SaveAs(filename);
                    cliente.Foto = filename;
                }
                cliente.Distrito.IdDistrito = Convert.ToInt32(ddlDistrito.SelectedValue);
                cliente.Nombre = txtNombres.Text.Trim();
                cliente.Ocupacion = txtOcupacion.Text.Trim();
                cliente.Ruc = txtRuc.Text.Trim();
                cliente.RazonSocial = txtRazonSocial.Text.Trim();
                cliente.Sexo = rblSexo.SelectedItem.Text.Substring(0, 1);
                cliente.Telefono = txtTelefono.Text.Trim();

                ClienteManager.Instancia.Modificar(cliente);
                ClientScript.RegisterStartupScript(GetType(), "mostrar", "alert('Sus datos de Perfil se grabaron satisfactoriamente.');", true);
            }
            catch (Exception)
            {
                ClientScript.RegisterStartupScript(GetType(), "mostrar", "alert('El Registro no se pudo grabar, intente de nuevo o más tarde.');", true);
            }            
        }

        private void LoadCliente()
        {
            var user = Membership.GetUser();
            var cliente = ClienteManager.Instancia.ObtenerPorGuid((Guid)user.ProviderUserKey);

            txtApellidos.Text = cliente.Apellidos;
            txtCelular.Text = cliente.Celular;
            txtDireccion.Text = cliente.Direccion;
            txtEmail.Text = cliente.Email;
            txtFechaNacimiento.Text = cliente.FechaNacimiento.ToString("dd/MM/yyyy");
            txtNombres.Text = cliente.Nombre;
            txtNumeroDocumento.Text = cliente.Dni;
            txtRuc.Text = cliente.Ruc;
            txtRazonSocial.Text = cliente.RazonSocial;
            txtOcupacion.Text = cliente.Ocupacion;
            txtTelefono.Text = cliente.Telefono;
            rblSexo.SelectedValue = cliente.Sexo;

            var distrito = DistritoManager.Instancia.Obtener(cliente.Distrito.IdDistrito);
            var provincia = ProvinciaManager.Instancia.Obtener(distrito.Provincia.IdProvincia);
            LoadProvincias(provincia.Departamento.IdDepartamento);
            LoadDistritos(provincia.IdProvincia);

            ddlDepartamento.SelectedValue = provincia.Departamento.IdDepartamento.ToString();
            ddlProvincia.SelectedValue = provincia.IdProvincia.ToString();
            ddlDistrito.SelectedValue = cliente.Distrito.IdDistrito.ToString();

            if (!string.IsNullOrEmpty(cliente.Foto))
                imgFoto.ImageUrl = cliente.Foto;
        }

        private void LoadDepartamentos()
        {
            var departamentos = DepartamentoManager.Instancia.Listar(true);
            BindControl<SC.Departamento>.BindDropDownList(ddlDepartamento, departamentos);
            if (departamentos.Count == 0) return;
            LoadProvincias(departamentos.First().IdDepartamento);
        }

        private void LoadProvincias(int idDepartamento)
        {
            var provincias = ProvinciaManager.Instancia.ListarPorIdDepartamento(idDepartamento);
            BindControl<SC.Provincia>.BindDropDownList(ddlProvincia, provincias);
            if (provincias.Count == 0) return;
            LoadDistritos(provincias.First().IdProvincia);
        }

        private void LoadDistritos(int idProvincia)
        {
            var distritos = DistritoManager.Instancia.ListarPorIdProvincia(idProvincia);
            BindControl<SC.Distrito>.BindDropDownList(ddlDistrito, distritos);
        }
    }
}
